package com.hive.udf;

import java.text.NumberFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.hadoop.hive.ql.exec.UDF;

public class Haliday extends UDF {


	// 解决double转string的科学计数法的问题
	public String double_to_string(double dou) {
		Double dou_obj = new Double(dou);
		NumberFormat nf = NumberFormat.getInstance();
		nf.setGroupingUsed(false);
		String dou_str = nf.format(dou_obj);
		return dou_str;
	}

	public String evaluate(double date_dou) {
		String date_str = this.double_to_string(date_dou);
		return evaluate(date_str);
	}

	public int evaluate(double date_dou, String flag) {
		String date_str = this.double_to_string(date_dou);
		return evaluate(date_str, flag);
	}

	public String evaluate(String date_str) {
		if (!this.match_date(date_str).equals("null")) {
			date_str = this.match_date(date_str);
			return ConfKit.get(date_str) == null ? "null" : ConfKit.get(date_str);
		} else {
			return "null";
		}
	}

	public int evaluate(String date_str, String flag) {
		if (flag.equals("count") && !this.match_date(date_str).equals("null")) {
			date_str = this.match_date(date_str);
			return ConfKit.get(date_str) == null ? 0 : 1;
		} else {
			return 0;
		}
	}
	
	public String evaluate(){
		return "success";
	}

	public String match_date(String date_str) {
		// 匹配20160101这种日期格式
		Pattern pat_common = Pattern.compile("\\d{8}");
		Matcher mat_common = pat_common.matcher(date_str);

		// 匹配2016-01-01这种日期格式
		Pattern pat_strike = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
		Matcher mat_strike = pat_strike.matcher(date_str);

		// 匹配 2016-01-01 10:35:46 这种日期格式
		Pattern pat_colon = Pattern.compile("\\d{4}-\\d{2}-\\d{2}(\\s)+\\d{2}:\\d{2}:\\d{2}");
		Matcher mat_colon = pat_colon.matcher(date_str);

		if (mat_colon.find()) {
			return date_str.replace("-", "").substring(0, 8);
		} else if (mat_strike.find()) {
			return date_str.replace("-", "");
		} else if (mat_common.find()) {
			return date_str;
		} else {
			return "null";
		}
	}
	
}
